Commit 88272d1214e1738ad7b6bfb28a2c9b280b3ab6b0
Parents : 71ad205
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-05-18T05:08:51-05:00
fix(messages): preserve original timestamps and fix conversation ordering
Changes
3 files changed, 11 insertions(+), 12 deletions(-)
Diff
diff --git a/meshchatx/meshchat.py b/meshchatx/meshchat.py
index eb658ebb..8734642c 100644
--- a/meshchatx/meshchat.py
+++ b/meshchatx/meshchat.py
@@ -11150,13 +11150,10 @@ class ReticulumMeshChat:
or "Anonymous Peer"
),
),
- "latest_message_created_at": row["timestamp"],
+ "latest_message_created_at": row["created_at"],
"lxmf_user_icon": user_icon,
"is_contact": bool(row.get("is_contact", 0)),
- "updated_at": datetime.fromtimestamp(
- row["timestamp"],
- UTC,
- ).isoformat(),
+ "updated_at": row["created_at"],
},
)
diff --git a/meshchatx/src/backend/database/messages.py b/meshchatx/src/backend/database/messages.py
index 9b04b43e..532be38a 100644
--- a/meshchatx/src/backend/database/messages.py
+++ b/meshchatx/src/backend/database/messages.py
@@ -51,6 +51,8 @@ class MessageDAO:
if f != "hash"
and f
not in (
+ "timestamp",
+ "created_at",
"path_hops_at_send",
"path_interface_at_send",
"path_finding_measure",
@@ -308,13 +310,12 @@ class MessageDAO:
query = f"""
SELECT {self.CONVERSATION_LIST_COLUMNS} FROM lxmf_messages m1
INNER JOIN (
- SELECT peer_hash, MAX(timestamp) as max_ts
+ SELECT peer_hash, MAX(id) as max_id
FROM lxmf_messages
WHERE peer_hash IS NOT NULL
GROUP BY peer_hash
- ) m2 ON m1.peer_hash = m2.peer_hash AND m1.timestamp = m2.max_ts
- GROUP BY m1.peer_hash
- ORDER BY m1.timestamp DESC
+ ) m2 ON m1.peer_hash = m2.peer_hash AND m1.id = m2.max_id
+ ORDER BY m1.id DESC
"""
return self.provider.fetchall(query)
@@ -393,6 +394,7 @@ class MessageDAO:
WHERE state = 'outbound'
OR (state = 'sent' AND method = 'opportunistic')
OR state = 'sending'
+ OR state = 'generating'
""",
(datetime.now(UTC).isoformat(),),
)
diff --git a/meshchatx/src/backend/message_handler.py b/meshchatx/src/backend/message_handler.py
index 4c46722d..10072df2 100644
--- a/meshchatx/src/backend/message_handler.py
+++ b/meshchatx/src/backend/message_handler.py
@@ -102,11 +102,11 @@ class MessageHandler:
CASE WHEN con.id IS NOT NULL THEN 1 ELSE 0 END as is_contact
FROM lxmf_messages m1
INNER JOIN (
- SELECT peer_hash, MAX(timestamp) as max_ts
+ SELECT peer_hash, MAX(id) as max_id
FROM lxmf_messages
WHERE peer_hash IS NOT NULL
GROUP BY peer_hash
- ) m2 ON m1.peer_hash = m2.peer_hash AND m1.timestamp = m2.max_ts
+ ) m2 ON m1.peer_hash = m2.peer_hash AND m1.id = m2.max_id
LEFT JOIN announces a ON a.destination_hash = m1.peer_hash
LEFT JOIN custom_destination_display_names c ON c.destination_hash = m1.peer_hash
LEFT JOIN contacts con ON (
@@ -159,7 +159,7 @@ class MessageHandler:
if where_clauses:
query += " WHERE " + " AND ".join(where_clauses)
- query += " GROUP BY m1.peer_hash ORDER BY m1.timestamp DESC"
+ query += " GROUP BY m1.peer_hash ORDER BY m1.id DESC"
if limit is not None:
query += " LIMIT ? OFFSET ?"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────